package com.example.meservice.utils;

import jakarta.mail.*;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;

import java.util.Properties;

/**
 * 邮件工具类
 * 提供发送邮箱验证码的功能
 *
 * @author czwa
 */
public class MailUtil {
    /**
     * 发送邮箱验证码
     *
     * @param targetEmail 目标邮箱地址
     * @param authCode 验证码内容
     * @throws RuntimeException 当邮件发送失败时抛出
     */
    public static void sendEmailCode(String targetEmail, String authCode) {
        // 发件人邮箱信息
        final String from = "1963244380@qq.com";
        final String password = "fydkkwyrnuodbeca"; // QQ邮箱SMTP授权码

        // 配置SMTP服务器参数
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.qq.com"); // QQ邮箱SMTP主机
        props.put("mail.smtp.port", "465"); // SSL加密端口
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // SSL连接工厂
        props.put("mail.smtp.socketFactory.fallback", "false"); // 禁用 fallback 机制
        props.put("mail.smtp.auth", "true"); // 启用认证

        // 创建邮件会话
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, password);
            }
        });

        try {
            // 构建邮件内容
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from, "无爱咖啡")); // 发件人信息（邮箱+显示名称）
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(targetEmail)); // 收件人地址
            message.setSubject("注册验证码"); // 邮件主题
            message.setText("您的验证码为：" + authCode + "（有效期3分钟）"); // 邮件正文

            // 发送邮件
            Transport.send(message);
            System.out.println("验证码邮件发送成功！");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("邮件发送失败: " + e.getMessage());
        }
    }
}